home *** CD-ROM | disk | FTP | other *** search
/ Cubase Magazine 51 / Issue #51.iso / pc / 3-TUTORIAL / CUBASIS VST / source / AGain / AGain.cpp next >
C/C++ Source or Header  |  2002-11-07  |  5KB  |  152 lines

  1. /*-----------------------------------------------------------------------------
  2.  
  3. ===========================================================================
  4. Rivista  : Cubase Magazine
  5. Rubrica  : CUBASIS VST FACILE (15)
  6. Articolo : 'Realizziamo un semplice Plug-In per Cubasis VST 3.0 (parte IV)'
  7.        di: Giuseppe Varriale (admin@websoftconsulting.com)
  8. Contenuto: analisi, personalizzazione e costruzione a scopo didattico
  9.            di un semplice plug-in (CMGain) per Cubasis VST 3.
  10.  
  11. File     : AGain.cpp
  12. ===========================================================================
  13.  
  14. Esempio originale del VST SDK: AGain
  15. ⌐ 1999, Steinberg Soft und Hardware GmbH, All Rights Reserved
  16.  
  17.  
  18. -----------------------------------------------------------------------------*/
  19.  
  20. #include "AGain.hpp"
  21.  
  22. //-----------------------------------------------------------------------------
  23. // il costruttore del plug-in!
  24.  
  25. AGain::AGain(audioMasterCallback audioMaster)
  26.     : AudioEffectX(audioMaster, 1, 1)    // 1 programma, 1 parametro
  27. {
  28.     fGain = 0.5;        // default dell'unico param. (cursore dello slider al centro)
  29.     setNumInputs(2);    // numero ingressi che il plug-in pu≥ processare
  30.     setNumOutputs(2);    // numero uscite che il plug-in pu≥ processare
  31.     setUniqueID('CMGN');// identificatore univoco di questo plug-in
  32.                         // necessario ad es. per corretto caricamento programmi/banchi
  33.     canMono();            // 1 ingresso / 2 uscite
  34.  
  35.     // supporta, oltre l'accumulazione, anche il æprocessamento con rimpiazzoÆ!
  36.     canProcessReplacing();
  37.  
  38.     //  assegna il nome programma di default 
  39.     setProgramName("CMGain Default Prog."); 
  40. }
  41.  
  42. //-----------------------------------------------------------------------------------------
  43. // il distruttore del plug-in!
  44.  
  45. AGain::~AGain()
  46. {
  47.     // in questo caso niente di particolare da compiere
  48. }
  49.  
  50. //-----------------------------------------------------------------------------------------
  51. // Imposta nome di programma
  52.  
  53. void AGain::setProgramName(char *name)
  54. {
  55.     strcpy(programName, name);
  56. }
  57.  
  58. //-----------------------------------------------------------------------------------------
  59. // Ottieni nome di programma
  60.  
  61. void AGain::getProgramName(char *name)
  62. {
  63.     strcpy(name, programName);
  64. }
  65.  
  66. //-----------------------------------------------------------------------------------------
  67. // Imposta Parametro di indice index al valore value
  68. // nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
  69.  
  70. void AGain::setParameter(long index, float value)
  71. {
  72.     fGain = value;
  73. }
  74.  
  75. //-----------------------------------------------------------------------------------------
  76. // Ottieni valore del Parametro di indice index
  77. // nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
  78.  
  79. float AGain::getParameter(long index)
  80. {
  81.     return fGain;
  82. }
  83.  
  84. //-----------------------------------------------------------------------------------------
  85. // Ottieni Nome del Parametro di indice index
  86. // nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
  87.  
  88. void AGain::getParameterName(long index, char *label)
  89. {
  90.     strcpy(label, "  Guadagno  ");
  91. }
  92.  
  93. //-----------------------------------------------------------------------------------------
  94. // Converti valore del Parametro di indice index in una stringa di visualizzazione
  95. // nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
  96.  
  97. void AGain::getParameterDisplay(long index, char *text)
  98. {
  99.     dB2string(fGain, text);
  100. }
  101.  
  102. //-----------------------------------------------------------------------------------------
  103. // Ottieni Etichetta del Parametro di indice index
  104. // nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
  105.  
  106. void AGain::getParameterLabel(long index, char *label)
  107. {
  108.  
  109.      strcpy(label, "   [dB]   ");
  110. }
  111.  
  112. //=========================================================================================
  113. //                     FUNZIONI MEMBRO DI ELABORAZIONE DEL SEGNALE AUDIO
  114. //=========================================================================================
  115.  
  116. //-----------------------------------------------------------------------------------------
  117. // elaborazione del segnale con ACCUMULO
  118. // NB: il += nel corpo del loop significa praticamente
  119. // (*out1++) = (*out1++) + (*in1++) * fGain
  120.  
  121. void AGain::process(float **inputs, float **outputs, long sampleFrames)
  122. {
  123.     float *in1  =  inputs[0];
  124.     float *in2  =  inputs[1];
  125.     float *out1 = outputs[0];
  126.     float *out2 = outputs[1];
  127.  
  128.     while(--sampleFrames >= 0)
  129.     {
  130.         (*out1++) += (*in1++) * fGain;    // accumulating (+=)
  131.         (*out2++) += (*in2++) * fGain;
  132.     }
  133. }
  134.  
  135. //-----------------------------------------------------------------------------------------
  136. // elaborazione del segnale con RIMPIAZZO/SOSTITUZIONE
  137. // NB: il solo = nel corpo del loop 
  138.  
  139. void AGain::processReplacing(float **inputs, float **outputs, long sampleFrames)
  140. {
  141.     float *in1  =  inputs[0];
  142.     float *in2  =  inputs[1];
  143.     float *out1 = outputs[0];
  144.     float *out2 = outputs[1];
  145.  
  146.     while(--sampleFrames >= 0)
  147.     {
  148.         (*out1++) = (*in1++) * fGain;    // replacing (=)
  149.         (*out2++) = (*in2++) * fGain;
  150.     }
  151. }
  152.